package com.zmn.plat.services.interfaces.servcategory;

import java.util.List;

import com.zmn.common.dictionary.DictModel;
import com.zmn.plat.model.entity.servcategory.ServCategory;
import com.zmn.plat.model.entity.servcategory.ServCategoryQuery;

/**
 * @author duanzuocai
 * @version v1.0
 * @类说明：服务类型
 * @since 2018/10/23 14:55
 */
public interface ServCategoryService {

    /**
     * 查询服务分类
     *
     * @param categId
     *            ID
     * @return
     */
    ServCategory findByKey(Integer categId);

    /**
     * 按照CategId升序查询第一条服务分类
     *
     * @return
     */
    ServCategory findFirstOneByCategIdAsc();

    /**
     * 查询服务分类
     *
     * @param categIds
     *            ID
     * @return
     */
    List<ServCategory> findByKeys(List<Integer> categIds);

    /**
     * 名称查询
     *
     * @param name
     *            名称
     * @return
     */
    ServCategory findByName(String name);

    /**
     * 分页搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<ServCategory> listPageByQuery(ServCategoryQuery query);

    /**
     * 前台服务分类分页搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<ServCategory> listShowPageByQuery(ServCategoryQuery query);

    /**
     * 搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<ServCategory> listByQuery(ServCategory query);

    /**
     * 描述: 查询所有服务分类
     *  reids5min缓存
     *
     * @return java.util.List<com.zmn.plat.model.entity.servcategory.ServCategory>
     * @author jiafei
     * @since 2021/6/29 10:04
     */
    List<ServCategory> listServCategoryAll();

    /**
     * 前台服务分类搜索
     *
     * @param query
     *            条件
     * @return
     */
    List<ServCategory> listByQueryForShow(ServCategory query);

    /**
     * 根据渠道ID查询服务分类
     *
     * @param channelId
     *            渠道ID
     * @param showType
     *            产品分类 1后台 2前台
     * @return
     */
    List<ServCategory> listServCategoryByChannelId(Integer channelId, Integer showType);

    /**
     * 通过渠道ID,城市ID获取服务区域下已开通的服务分类列表
     *
     * @param channelId
     *            渠道ID
     * @param showType
     *            产品分类 1后台 2前台
     * @param cityId
     *            城市ID
     * @return
     */
    List<ServCategory> listServCategoryByChannelIdAndCityId(Integer channelId, Integer showType, Integer cityId);

    /**
     * 查询所有关联
     *
     * @return
     */
    List<DictModel> listAll();

    /**
     * 统计
     *
     * @param query
     *            条件
     * @return
     */
    Integer countByQuery(ServCategoryQuery query);

    /**
     * 更新
     *
     * @param category
     *            区域
     * @return
     */
    Integer updateByKey(ServCategory category);

    /**
     * 根据主键更新前台服务分类
     *
     * @param category
     * @return
     */
    Integer updateFrontByKey(ServCategory category);

    /**
     * 更新排序
     *
     * @param categId
     *            条件ID
     * @param sort
     *            序号
     * @param updater
     *            更新人
     * @return
     */
    Integer updateSortKey(int categId, int sort, String updater);

    /**
     * 更新前台服务分类排序
     *
     * @param categId
     *            条件ID
     * @param sort
     *            序号
     * @param updater
     *            更新人
     * @return
     */
    Integer updateShowSortKey(int categId, int sort, String updater);

    /**
     * 更新前台服务分类名称首字母
     *
     * @param categId
     *            条件ID
     * @param firstLetter
     *            序号
     * @param updater
     *            更新人
     * @return
     */
    Integer updateShowFirstLetterKey(int categId, String firstLetter, String updater);

    /**
     * 更新前台服务分类名称首字母
     *
     * @param categId
     *            条件ID
     * @param simpleSpell
     *            序号
     * @param updater
     *            更新人
     * @return
     */
    Integer updateShowSimpleSpellByKey(Integer categId, String simpleSpell, String updater);

    /**
     * 更新后台服务分类名称首字母
     *
     * @param categId
     *            条件ID
     * @param simpleSpell
     *            序号
     * @param updater
     *            更新人
     * @return
     */
    Integer updateSimpleSpellByKey(Integer categId, String simpleSpell, String updater);

    /**
     * 批量更新状态
     *
     * @param arrayIds
     *            id's
     * @param status
     *            状态
     * @param updater
     *            更新人
     * @return
     */
    Integer updateStatusBatch(List<Integer> arrayIds, int status, String updater);

    /**
     * 批量更新前台服务分类状态
     *
     * @param arrayIds
     *            id's
     * @param status
     *            状态
     * @param updater
     *            更新人
     * @return
     */
    Integer updateShowStatusBatch(List<Integer> arrayIds, int status, String updater);

    /**
     * 更新名称
     *
     * @param categId
     *            分类ID
     * @param name
     *            名称
     * @param updater
     *            更新者
     * @return
     */
    int updateNameKey(Integer categId, String name, String updater);

    /**
     * 更新前台服务分类名称
     *
     * @param categId
     *            分类ID
     * @param name
     *            名称
     * @param updater
     *            更新者
     * @return
     */
    int updateShowNameKey(Integer categId, String name, String updater);

    /**
     * 插入
     *
     * @param category
     *            对象
     * @return
     */
    Integer insert(ServCategory category);

    /**
     * 删除
     *
     * @param categId
     *            ID
     * @return
     */
    Integer deleteByKey(int categId);
}
